package com.cskaoyan.javase.oop2.encapsulate._1extends._1relation;
/**
 * 继承中父子类的关系,父类和子类到底有什么样的关系呢?
 * 从从属关系上来说,
 * 继承中的父子类具有 "is-a" 关系。
 * 即子类 "is-a" 父类。子类可以近似地看成是一个父类，子类可以当作父类来使用。
 *
 * 如何理解上面的子类"is-a"父类的这种关系呢?
 * 从以下三个角度来分析这个问题:
 *      1.从最直观的代码角度,子类"is-a"父类,说明子类可以当成一个父类去使用
 *          于是就可以让:
 *          一个父类引用可以指向子类对象
 *
 *      2.从数据类型的定义角度来理解,子类"is-a"父类
 *          数据类型: 一组合法数据集合以及基于这种数据集合的合法操作
 *          数据类型 = 数据 + 操作
 *          而子类通过继承父类
 *          子类会得到父类的所有成员(成员变量 + 成员方法)
 *          成员变量: 数据的集合
 *          成员方法: 操作的集合
 *          子类通过继承,就继承了父类的数据 + 操作
 *          所以从数据类型上来说,子类就覆盖了父类
 *          所以子类"is-a"父类
 *
 *      3.从最直观的逻辑角度:
 *          Student继承Person,学生是一个人
 *          Teacher继承Person,老师是一个人
 *          ...
 *
 * 以上三个角度,解释了子类"is-a"父类
 * 那么请思考,反过来有没有什么关系呢? 父类"is-a"子类?
 * 子类的功能往往更强大,反正不会更弱下,所以它可以当成父类去使用
 * 但反过来,父类往往更弱下,父类是肯定不能当成子类去使用的,反过来没有任何关系.
 *
 * @since 17:15
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 以往我们写代码
        Father f = new Father();
        Son s = new Son();

        // 学习了继承以后,可以存在下面的写法
        /*
            引用是我们操作对象的一个中间体
            所以父类引用指向子类对象
            就是将这个子类对象,当成一个父类去使用
            这说明子类"is-a"父类
         */
        Father fs = new Son();
    }
}
class Father{

}
class Son extends Father{

}
